home *** CD-ROM | disk | FTP | other *** search
/ Dominator 4 / Dominator 4.iso / golf / lib / basics.h next >
Encoding:
C/C++ Source or Header  |  1995-01-27  |  12.3 KB  |  409 lines

  1. //╔══════════════════════════════════════════════════════════════════════════╗
  2. //║ UPDATE LOG: BASICS.H                                                     ║
  3. //║                                                                          ║
  4. //║ date         update by       description                                 ║
  5. //║ ────         ─────────       ───────────                                 ║
  6. //║                                                                          ║
  7. //║                                                                          ║
  8. //║                                                                          ║
  9. //║                                                                          ║
  10. //╚══════════════════════════════════════════════════════════════════════════╝
  11.  
  12. #ifndef _BASICS_H_INCLUDED
  13. #define _BASICS_H_INCLUDED
  14.  
  15. #include "typedefs.h"
  16. #include "debug.h"
  17.  
  18. /****************************************************************************/
  19.  
  20. #define    MCGA_RAM 0xA0000
  21.  
  22. #if DEBUGGING==0
  23.     #define    ifkey(k)    if(keydata->keymap[k])
  24. #else
  25.     #define    ifkey(k)    if(keydata->last_key==(k))
  26.     #define    get_key    getbioskey
  27. #endif
  28.  
  29. #if DEBUGGING==0
  30.     #define    rawkey(k)    (keydata->keymap[k])
  31. #else
  32.     #define    rawkey(k)    (keydata->last_key==(k))
  33. #endif
  34.  
  35.  
  36. #define    RWSIZE    32256            // read/write chunks of this size
  37.  
  38. #define    MAX_MEM    128            // maximum number of allocated memory lumps
  39.  
  40. #define    D32RealSeg(P)    ((((dword) (P)) >> 4) & 0xffff)
  41. #define    D32RealOff(P)    (((dword) (P)) & 0xf)
  42.  
  43. #define FALSE    0
  44. #define TRUE    !FALSE
  45.  
  46. #define TIMER_SPEED 1193180        // hz rate of timer
  47.  
  48. /****************************************************************************/
  49.  
  50. enum DISK_ERRORS {            // errors returned by critical error handler
  51.     E_WPROT = 1, E_DRIVENO, E_NODISK, E_UNKNOWN, E_DATERROR, E_BADLEN,
  52.     E_SEEK, E_FORMAT, E_SECTOR, E_NOPAPER, E_WRITE, E_READ, E_GENERAL,
  53.     E_CHANGE = 16
  54. };
  55.  
  56.  
  57. #define E_OK            0      // error numbers given as parameter to
  58. #define E_OPEN            -1     // getout()
  59. #define E_MEMORY        -2
  60. #define E_IO            -3
  61. #define E_DISKERR        -4
  62. #define E_DOSMEM        -5
  63. #define E_NOMOUSE        -6
  64. #define E_CREATE        -7
  65. #define E_TOOMANY        -8
  66. #define E_MEMLUMPS    -9
  67. #define E_VIDEO        -10
  68.  
  69. #define MAX_FILES 32
  70.  
  71. #ifndef DISK_C
  72. #define close my_close
  73. #endif
  74.  
  75. #define MAX_DOSERROR 39
  76.  
  77. /****************************************************************************/
  78.  
  79. enum keys {    // equates for key scancodes
  80.  
  81.     K_ESC=1, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0,
  82.     K_MINUS, K_PLUS, K_BSP, K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_U, K_I,
  83.     K_O, K_P, K_OPENSB, K_CLOSESB, K_RET, K_CTRL, K_A, K_S, K_D, K_F, K_G,
  84.     K_H, K_J, K_K, K_L, K_COLON, K_APOST, K_APOST2, K_LSHIFT, K_BSLASH,
  85.     K_Z, K_X, K_C, K_V, K_B, K_N, K_M, K_COMMA, K_DOT, K_SLASH, K_RSHIFT,
  86.     K_PRINT, K_ALT, K_SPACE, K_CAPS, K_F1, K_F2, K_F3, K_F4, K_F5, K_F6,
  87.     K_F7, K_F8, K_F9, K_F10, K_NUMLOCK, K_SCRLOCK, K_HOME, K_UP, K_PGUP,
  88.     K_KMINUS, K_LEFT, K_K5, K_RIGHT, K_KPLUS, K_END, K_DOWN, K_PGDN, K_INS,
  89.     K_DEL, K_SYSREQ, K_F11=0x57, K_F12 };
  90.  
  91. #define SIZE_KEYMAP 128            // 128 possible keys
  92. #define SIZE_KEYBUF 64            // room for 64 keys in the keyboard buffer
  93.  
  94. /****************************************************************************/
  95.  
  96. struct keystuff {
  97.     uchar    keymap[SIZE_KEYMAP]; //keymap array, 0 = released, -1 = pressed
  98.     uchar    keybuf[SIZE_KEYBUF];
  99.     ushort    bufin;
  100.     ushort    bufout;
  101.     ushort    bufchars;
  102.     uchar    more;
  103.     uchar    action;
  104.     uchar    last_key;    // last key pressed
  105.     uchar    keys_held;    // number of keys currently held down
  106. };
  107.  
  108. struct todstuff {
  109.     word        old_rmoff;
  110.     word        old_rmseg;
  111.     dword    old_pmoff;
  112.     word        old_pmseg;
  113.     word        tod_count;
  114.     dword    clock;        // big clock counter, 60hz
  115.     word        vbl_count;    // no. of vbls since last sync()
  116.     word        clk_splits[32];    // split timings for timer
  117.     word        no_splits;    // number of splits
  118.     word        split_no;    // next split number
  119.     word        vbl_timerval;    // value returned by calc_vbltimer()
  120.     word        fadecnt;    // frames left during fade
  121.     uchar    source_pal[768]; // the original palette
  122.     word        delta_pal[768];    // palette used for fade calculation
  123.     word        work_pal[768];    // current palette
  124.     char        fadestart;
  125.     char        fadestop;
  126.     char        fadeflip;
  127.     char        vbl_flag;    // flag to say vbl has been done
  128.     uchar    colour;
  129. };
  130.  
  131. struct brkstuff {
  132.     dword        nothing;
  133. };
  134.  
  135. struct critstuff {
  136.     char    diskerr;                            //value returned by critical error handler
  137. };
  138.  
  139. struct soundstuff {
  140.     word        old_rmoff;
  141.     word        old_rmseg;
  142.     dword    old_pmoff;
  143.     word        old_pmseg;
  144.     word        sbp_base;
  145.     word        sb_addr;
  146.     uchar    sb_page;
  147.     word        sb_length;
  148.     word        sb_length1;
  149.     word        sb_count;
  150.     uchar    sb_rate;
  151.     uchar    sb_mode;
  152.     uchar    sb_status;
  153.     word        addr_delay;
  154.     word        data_delay;
  155.     word        int_flag;
  156. };
  157.  
  158. struct soundinst {
  159.     word        old_rmoff;
  160.     word        old_rmseg;
  161.     dword    old_pmoff;
  162.     word        old_pmseg;
  163.     word        sbp_base;
  164.     word        addr_delay;
  165.     word        data_delay;
  166.     word        int_flag;
  167. };
  168.  
  169. /****************************************************************************/
  170.  
  171. extern void __interrupt pm_keyint(void);
  172. extern void __interrupt pm_vblint(void);
  173. extern void __interrupt pm_todint(void);
  174. extern void __interrupt pm_brkint(void);
  175. extern void __interrupt pm_critint(void);
  176. extern void __interrupt pm_int_sbinstall(void);
  177. extern void __interrupt pm_sb_irq(void);
  178.  
  179. extern int start_keystuff;
  180. extern int start_todstuff;
  181. extern int start_vblstuff;
  182. extern int start_brkstuff;
  183. extern int start_critstuff;
  184. extern int start_soundinst;
  185. extern int start_soundstuff;
  186.  
  187. extern int pm_landmark();
  188.  
  189.  
  190.  
  191. extern int end_keystuff;
  192. extern int end_todstuff;
  193. extern int end_vblstuff;
  194. extern int end_brkstuff;
  195. extern int end_critstuff;
  196. extern int end_soundinst;
  197. extern int end_soundstuff;
  198.  
  199. extern int getbioskey(void);        //bios version of get_key routine
  200.  
  201. extern word old_rmtodoff;
  202. extern word old_rmtodseg;
  203. extern void start_tod(void);
  204. extern void init_tod(void);
  205. extern void reset_tod(void);
  206.  
  207. extern struct keystuff *keydata;    // pointer to keyboard handler data area
  208. extern struct todstuff *toddata;    // pointer to timer handler data area
  209. extern struct brkstuff *brkdata;    // pointer to program break data area
  210. extern struct critstuff *critdata;    // pointer to critical error data area
  211. extern struct soundstuff *sounddata;    // pointer to sound blaster handler data area
  212. extern struct soundstuff *isounddata;    // pointer to sound blaster handler data area
  213.  
  214. extern word read_timer(void);
  215. extern int calc_vbltimer(void);
  216.  
  217. /****************************************************************************/
  218.  
  219. /////////////////////////the joystick variables/////////////////////////////
  220. ////////////////////refer to input.s for descriptions///////////////////////
  221.  
  222. /*extern char joy_mask;
  223. extern char joy_check;
  224. extern word joy_timeout;
  225.  
  226. extern char joy1_fire;
  227. extern char joy2_fire;
  228.  
  229. extern sword joy1_xc;
  230. extern sword joy1_yc;
  231. extern sword joy1_lscale;
  232. extern sword joy1_rscale;
  233. extern sword joy1_uscale;
  234. extern sword joy1_dscale;
  235. extern sword joy1_x;
  236. extern sword joy1_y;
  237. extern word joy1_xcentre;
  238. extern word joy1_ycentre;
  239. extern sword joy1_lthresh;
  240. extern sword joy1_rthresh;
  241. extern sword joy1_uthresh;
  242. extern sword joy1_dthresh;
  243.  
  244. extern sword joy2_xc;
  245. extern sword joy2_yc;
  246. extern sword joy2_lscale;
  247. extern sword joy2_rscale;
  248. extern sword joy2_uscale;
  249. extern sword joy2_dscale;
  250. extern sword joy2_x;
  251. extern sword joy2_y;
  252. extern word joy2_xcentre;
  253. extern word joy2_ycentre;
  254. extern sword joy2_lthresh;
  255. extern sword joy2_rthresh;
  256. extern sword joy2_uthresh;
  257. extern sword joy2_dthresh;*/
  258.  
  259. ////////////////////////////////////////////////////////////////////////////
  260.  
  261. /****************************************************************************/
  262.  
  263. extern int init_mouse(void);
  264. extern int set_mouseparams(void);
  265.  
  266. extern word mbut;            // bitmask for mouse buttons
  267. extern word mx;                // absolute x-coordinate
  268. extern word my;                // absolute x-coordinate
  269.  
  270. extern char *copysource, *copydest;    // used by the screen dumping routines
  271.  
  272. extern void print_text(char *, int, int);
  273. extern char *txt_screen;        // which screen to print text on
  274. extern dword txt_linewid;        // width of the screen line
  275. extern dword txt_linewid8;        // line width * 8
  276. extern uchar txt_col;            // draw colour for text
  277.  
  278. extern struct handler_data handlers[];    // array of handler data structures
  279.  
  280. extern void handler(int, int);        // (INSTALL/REMOVE, handler number)
  281.  
  282. extern char exitstr[];            // 1k buffer can be used for most things
  283.  
  284. extern char last_fname[];
  285. extern long last_flen;
  286. extern int last_error;
  287. extern int last_fmode;
  288. extern int last_handle;
  289. extern int last_memsize;
  290.  
  291. extern char curdrive;
  292.  
  293. int setup(void);                                // do basic game setup
  294.  
  295. void blank_box(int, int, int, int);    // clear an area on screen
  296.  
  297. extern char *error_txt[];        // array of error messages
  298. extern char *dos_error[];        // array of DOS error messages
  299.  
  300. extern word mouse_buttons;        // no. of buttons on mouse
  301.  
  302.  
  303. extern int memlumps;            // no. of memory chunks allocated
  304. extern ulong memdata[MAX_MEM][2];    // address and size of memory chunks
  305.  
  306. extern char game_palette[256][3];    // the game palette
  307.  
  308. extern char *backscr;            // 64k screen, allocated by setup()
  309.  
  310.  
  311. extern char *file_names[MAX_FILES];
  312.  
  313.  
  314. /****************************************************************************/
  315.  
  316. //////////////////////////////useful routines///////////////////////////////
  317.  
  318. // check to see if a key is being held down like this:-
  319. //
  320. // ifkey(K_UP) {
  321. //        ...do some stuff...
  322. //    }
  323.  
  324. extern int get_key(void);        //returns next key in buffer or 0 if empty
  325. extern void wait_vblstart(void);     // wait for the start of the next vbl
  326. extern void sync(void);            // should be done at start of game loop
  327. extern void setcol(char);        // set the background colour
  328. extern void read_joy(void);        // you guessed it, reads the joystick
  329. extern void fade_to_col(int, int);     // (no. of frames to fade over, RGB value)
  330. extern void fade_to_pal(int, char *);     // (no. of frames, palette address)
  331. extern void read_mouse(void);        // read the mouse, sets the variables
  332. extern void clr_screen(void);        // clear screen pointed to by copydest
  333. extern void dump_screen(void);        // dump screen from copysource to copydest
  334. extern void print(int, int, char *, ...); // prints text as printf except
  335.  
  336.  
  337. // these open routines all return a file handle //
  338.  
  339. extern int open_read(char *);        // (fname), opens file for reading
  340.  
  341. extern int open_write(char *);        // (fname), opens file for read & write
  342.  
  343. extern int open_new(char *);        // (fname), creates a new file
  344.  
  345.  
  346. extern void close(int);            // (handle), close file with this handle
  347.  
  348. extern void read_blk(int, uchar *, ulong);    // (file handle, data area, len)
  349.  
  350. extern void write_blk(int, uchar *, ulong);    // (file handle, data area, len)
  351.  
  352. extern long diskfree(int);        // (drive number)
  353.  
  354. extern void *install(char *);        // (filename), installs file in memory
  355.  
  356. extern void clear_keyb(void);        // clears the keyboard buffer
  357.  
  358. extern void getout(int);        // (error number), quits program
  359.  
  360. extern void wait_fade(void);        // wait for a fade to finish
  361.  
  362. /****************************************************************************/
  363.  
  364. struct handler_data {        // an interrupt handler data structure
  365.     word    pm_seg;            // old protected-mode handler address
  366.     dword pm_off;            //
  367.     word    rm_seg;            // old real-mode handler address
  368.     word    rm_off;            //
  369.     word    done;            // install flag
  370.     word    vector;            // vector number for handler
  371.     void **dataptr;        // address of pointer to handler data area
  372.     char *rmhand_start;        // start of real-mode handler
  373.     void (*init)(void);        // initialization routine, NULL if none
  374.     void (__interrupt *pm_handler)(void);    // protected-mode handler address
  375.     word    datasize;            // size of data area
  376.     char *rmhand_end;        // end of real-mode handler
  377. };
  378.  
  379. enum handler_op { REMOVE, INSTALL };
  380.  
  381. enum handler_types {        // the interrupt handler equates
  382.     H_KEYBOARD, H_TOD, H_CTRL_C, H_CRITICAL, H_FMVTOD, H_LANDMARK,
  383.     NUM_HANDLERS
  384. };
  385.  
  386. #endif
  387.  
  388. /****************************************************************************/
  389. /*                                GAZZA'S STUFF
  390. /****************************************************************************/
  391.  
  392. extern    int    joy_xmin;
  393. extern    int    joy_xmax;
  394. extern    int    joy_ymin;
  395. extern    int    joy_ymax;
  396. extern    int    joy1_x;                //values from -16 to 16
  397. extern    int    joy1_y;
  398.  
  399. extern    short    joy_x;
  400. extern    short    joy_y;
  401. extern    char    joy1_fire;
  402. extern    char    joy_flag;
  403.  
  404. extern    short    scrxsize;
  405. extern    short    scrysize;
  406.  
  407. /****************************************************************************/
  408.  
  409.